/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 版本: 苏州公安统一用户管理平台1.0
 * <p>
 * 作者: 090922(陈伟)
 * <p>
 * 文件名:PageUtil.java
 * <p>
 * 类产生时间: 2012-6-4 下午2:35:35
 * <p>
 * 负责人: 090922(陈伟)
 * <p>
 * Email:javacspring@gmail.com
 * <p>
 * 所在组 : 苏州公安统一用户管理平台
 * <p>
 * 所在部门: 电信/国土——技术二部
 * <p>
 * <p>
 */
package com.oceansoft.core.common.util;

import com.oceansoft.core.common.constant.Constant;

/**
 * 分页工具类
 * 
 * @author chenw
 * 
 */
public class PageUtil {
	/**
	 * 计算分页开始参数
	 * 
	 * @param pageIndex
	 *            当前页索引
	 * @param pageSize
	 *            分页大小
	 * @return 返回分页起始行号
	 */
	public static int getStartRow(int pageIndex, int pageSize) {
		if (pageIndex < 0) {
			pageIndex = 1;
		}
		if (pageSize < 0) {
			pageSize = Constant.PAGE_SIZE;
		}
		return (pageIndex * pageSize - pageSize) + 1;
	}

	/**
	 * 计算分页开始参数
	 * 
	 * @param pageIndex
	 *            当前页索引
	 * @return 返回分页起始行号
	 */
	public static int getStartRow(int pageIndex) {
		if (pageIndex < 0) {
			pageIndex = 1;
		}
		return (pageIndex * Constant.PAGE_SIZE - Constant.PAGE_SIZE) + 1;
	}

	/**
	 * 计算分页结束参数
	 * 
	 * @param pageIndex
	 *            当前页索引
	 * @param pageSize
	 *            分页大小
	 * @return 返回分页结束行号
	 */
	public static int getEndRow(int pageIndex, int pageSize) {
		if (pageIndex < 0) {
			pageIndex = 1;
		}
		if (pageSize < 0) {
			pageSize = Constant.PAGE_SIZE;
		}
		return pageIndex * pageSize;
	}

	/**
	 * 计算分页结束参数
	 * 
	 * @param pageIndex
	 *            当前页索引
	 * @return 返回分页结束行号
	 */
	public static int getEndRow(int pageIndex) {
		if (pageIndex < 0) {
			pageIndex = 1;
		}
		return pageIndex * Constant.PAGE_SIZE;
	}

	/**
	 * 获取分页SQL
	 * 
	 * @param pageIndex当前页索引
	 * @param pageSize
	 *            分页大小
	 * @return 返回分页SQL
	 */
	public static String getPageSQL(int pageIndex, int pageSize) {
		if (pageIndex < 0) {
			pageIndex = 1;
		}
		if (pageSize < 0) {
			pageSize = Constant.PAGE_SIZE;
		}
		return " BETWEEN " + ((pageIndex * pageSize - pageSize) + 1) + " AND " + pageIndex * pageSize;
	}

	/**
	 * 获取统计总数SQL
	 * 
	 * @param pageIndex
	 * @return 返回分页SQL
	 */
	public static String getCountSQL(String sql) {
		return String.format("SELECT COUNT(1) FROM (%s)", sql);
	}

	/**
	 * 获取分页SQL
	 * 
	 * @param pageIndex
	 * @return 返回分页SQL
	 */
	public static String getPageSQL(String sql, int pageIndex) {
		if (pageIndex < 0) {
			pageIndex = 1;
		}
		String sb = new StringBuffer("SELECT * FROM (SELECT TMP_00.*, ROWNUM RUM FROM (").append(sql)
				.append(") TMP_00 ")
				.append(") TMP_0 WHERE TMP_0.RUM <= ").append(pageIndex * Constant.PAGE_SIZE).append(" AND TMP_0.RUM >= ")
				.append((pageIndex * Constant.PAGE_SIZE - Constant.PAGE_SIZE) + 1).toString();
		return sb;
	}

	public static String getPageSQL(String sql, int offset,int limit) {
		String sb = new StringBuffer("SELECT * FROM (SELECT TMP_00.*, ROWNUM RUM FROM (").append(sql)
				.append(") TMP_00 ")
				.append(") TMP_0 WHERE TMP_0.RUM <= ").append(offset+limit).append(" AND TMP_0.RUM >= ")
				.append(offset+ 1).toString();
		return sb;
	}

	public static String getPageSQL(String sql, Pagination pg) {
		if (pg.getPageIndex() < 0) {
			pg.setPageIndex(1);
		}
		String sb = new StringBuffer("SELECT * FROM (SELECT TMP_00.*, ROWNUM RUM FROM (").append(sql)
				.append(") TMP_00 ")
				.append(") TMP_0 WHERE TMP_0.RUM <= ").append(pg.getPageIndex() * pg.getPageSize()).append(" AND TMP_0.RUM >= ")
				.append((pg.getPageIndex() * pg.getPageSize() - pg.getPageSize()) + 1).toString();
		return sb;
	}
}
